#pragma once

#include <vector>

#include <boost/shared_ptr.hpp>
#include <boostext/typedefs.hpp>
#include <engine.core/AudioAdapter.hpp>
#include <engine.core/Device.hpp>

#include "exports.hpp"




class ENGINE_AUDIO_API AudioDevice : public Device
{
public:

	typedef boost::shared_ptr<AudioDevice>   ptr;

	AudioDevice();
	virtual ~AudioDevice();

	/**
	 * Reports this Device's name.
	 */
	QString name() const;

	/**
	 * Query all adapters beforehand, to chose a particular one when
	 * initializing the audio device.
	 */
	static AudioAdapters queryAdapters(Audio::Type audioDevice = Audio::FMOD);

	/**
	 * Query all adapters from the current system.
	 */
	virtual AudioAdapters adapters() const = 0;

	/*virtual IAudioProject *loadProject(const std::string &fname) = 0;
	virtual void release(IAudioProject *pProject) = 0;*/



	/**
	 * Creates an AudioDevice of the given type.
	 */
	static Device::ptr create(const EngineInfo& info);
};
///////////////////////////////////////////////////////////////////////////////////////////////////
